7
תגובות

שאלה בנוגע ל-RegExp ב-JS

פתח OrelBeY ,
אם יש לי את הקוד הבא:
for (i in array[2]) {
re=new RegExp('[^"]' + array[2][i] + '([^-a-zA-z0-9א-ת"\']|$)', "g");
text=text.replace(re, '$1' + array[3][i] + '$2');
}

איך אני מחזיר את הטקסט לקדמותו עם השינויים ב-replace?
כתבתי שם $1 ו-$2 בכל מיני מקומות ולא הצלחתי...

7 תשובות

avatar ענה OrelBeY ב 05 למרץ 2012 #

(הדבר היחיד שאני רוצה שישתנה זה האיבר במערך.)
ואם כבר אני שואל, אז איך מונעים מ-^ ומ-\ להיכלל בביטוי בלי להרוס את התפקיד שלהם בביטוי הרגולרי הבא:

([^-a-zA-z0-9א-ת"\']|$)

avatar ענה iiddaannyy ב 05 למרץ 2012 #

להודעה הראשונה:
לא הבנתי מה ניסית לעשות.

להודעה השניה:
תוסיף באקסלאש (\) לפני.

avatar ענה OrelBeY ב 05 למרץ 2012 #

יש לי את הביטוי הרגולרי הזה:

re=new RegExp('[^"]' + array[2][i] + '([^-a-zA-z0-9א-ת"\']|$)', "g");

שעושה מה שעושה.
עכשיו, כשהוא מוצא טקסט מתאים ב-text.replace על הטקסט שבמשתנה text, הוא מחליף אותו במשהו.
הדבר היחיד שאני רוצה שהוא ישנה זה את
array[2][i]
ל-
array[3][i]
, ושאת כל השאר (מה שמסביב) ישאיר כמו שהוא.
בשביל זה אני אמור להשתמש ב-$1 וכאלה, כן? הבעיה היא שלא הצלחתי כמו שצריך... זה הכל.

בקשר להודעה השנייה:
כשאני כותב:
[^-a-zA-z0-9א-ת"\']

הוא בעצם מתייחס לטקסט שהוא לא מקף, אותיות גדולות וקטנות באנגלית, מספרים, אותיות בעברית, גרשיים כפולים וגרש בודד.
הבעיה היא שעצם זה שכתוב בהתחלה ^ (שאמור לגרום לכך שהטקסט שאחריו לא יהיה אמור להופיע בטקסט שעובר את הבדיקות) מוסיף גם את הסימן ^ לרשימה, והאקסלאש \ ששמתי כדי להבריח את הגרש גם נחשב אחד מהם, למרות שאני לא רוצה.

avatar ענה intval ב 08 למרץ 2012 #

<script type="text/javascript">
var replace = 'hi'; var with1 = '$1 bye $2';
text = 'hi man';

RegExp.escape = function(text)
{
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

regexp = new RegExp('([^"]*)' + RegExp.escape(replace) + '(\\W*)', "g");
document.write( text.replace(regexp, with1));
</script>

avatar ענה OrelBeY ב 08 למרץ 2012 #

אוה. איבדתי את עצמי. יש סיכוי להסבר קצרצר?
ותודה רבה. (:

avatar ענה intval ב 08 למרץ 2012 #

הפונקציה מחליפה את hi ב bye במקרים שבהם מה שנמצא לפני ה hi זה לא גרשיים ומה שנמצא אחרי ה hi זה לא אות או מספר